#pragma once

#include <QString>
#include <string>
#include <iostream>
#include <memory>
#include "outputImpl.h"

#define mDebug cmalgdebug()

using namespace std;

class cmalgdebug
{
public:
    cmalgdebug() {}
    ~cmalgdebug() {}

    cmalgdebug& operator<<(const QString &sMsg);             //重载 << 运算符 打印QString
    cmalgdebug& operator<<(const string &sMsg);              //重载 << 运算符 打印String
    cmalgdebug& operator<<(const bool &sMsg);                //重载 << 运算符 打印bool
    cmalgdebug& operator<<(const char &sMsg);                //重载 << 运算符 打印char
    cmalgdebug& operator<<(const float &sMsg);               //重载 << 运算符 打印float
    cmalgdebug& operator<<(const double &sMsg);              //重载 << 运算符 打印double
    cmalgdebug& operator<<(const char* sMsg);
    cmalgdebug& operator<<(const int &sMsg);          //重载 << 运算符 打印int

    //返回MyDebug对象
//    static cmalgdebug myDebug(){return cmalgdebug();}

    void Write(const QString &sMsg);        //在每个重载<<运算符的地方调用，把打印信息显示到窗口和写到日志
    void write2Log(const QString &sMsg);    //将Debug信息保存到 log.txt
    void write2Wnd(const QString &sMsg);    //将Debug信息显示到 m_pEdit

    static void stopThread() {
        outputImplPtr->stopTh();
    }

protected:
    static std::shared_ptr<outputImpl> outputImplPtr;
};

